import java.util.Arrays;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 石方旭
 * Date: 2022-04-30
 * Time: 16:08
 */

//本题思路就是把当前数字变为绝对值找出数组中的最小值
//在寻找的过程中分为两种情况--->比较的时候一定是加上绝对值-->更新ans的时候去掉绝对值也就是当前数字
//1.正常情况：当前数字的绝对值<ans那这个数字就是我们要找的最接近0的数字
//2.特殊情况：当前数字的绝对值=ans，题目要求是两个数字中较大的

class Solution {
    public int findClosestNumber(int[] nums) {
        int ans = Integer.MAX_VALUE;
        for(int num: nums) {
            int absNum = Math.abs(num);//当前数字的绝对值
            //absNum<Math.abs(ans)找出绝对值当中最小值，这个数字去掉绝对值就是我们要找的最接近0的数字
            // 第二种情况是当 当前数字的绝对值与最小值相等的时候，哪个大就返回哪个
            if(absNum<Math.abs(ans)||absNum==Math.abs(ans)&&num>ans) {
                ans = num;
            }
        }
        return ans;
    }
}


class Solution1 {
    public void moveZeroes(int[] nums) {
        int j =0;
        for(int i=0;i<nums.length;++i) {
            if(nums[i]!=0) {
                if(i>j) {
                    nums[j] = nums[i];
                    nums[i] = 0;
                }
                j++;
            }
        }
    }
}

class Solution2 {
    public void moveZeroes(int[] nums) {
        //左边找0，右边找非0，然后交换
        int leftIndex =0;
        int rightIndex = 0;
        while(leftIndex<nums.length) {
            if(nums[leftIndex]!=0) {
                int tmp = nums[leftIndex];
                nums[leftIndex] = nums[rightIndex];
                nums[rightIndex] = tmp;
                leftIndex++;
                rightIndex++;
            }else {
                leftIndex++;
            }
        }

    }
}

class Solution3 {
    public int removeElement(int[] nums, int val) {
        //思路就是定义两个指针，一个指针指向数组下标0位置处，一个指针指向数组下标最后一个位置上，然后左指针寻找要删除的元素，右指针寻找不是要删除的元素，然后将右指针指向的元素覆盖到左指针指向的元素上，同时覆盖之后，左指针往后走一步，右指针往前走一步，继续寻找。


        int leftIndex = 0;
        int rightIndex = nums.length - 1;
        while (leftIndex <= rightIndex) {
            // 找左边等于val的元素
            while (leftIndex <= rightIndex && nums[leftIndex] != val){
                ++leftIndex;
            }
            // 找右边不等于val的元素
            while (leftIndex <= rightIndex && nums[rightIndex] == val) {
                -- rightIndex;
            }

            // 将右边不等于val的元素覆盖左边等于val的元素
            if(leftIndex<rightIndex) {
                nums[leftIndex++] = nums[rightIndex--];
            }
        }
        return leftIndex;   // leftIndex一定指向了最终数组末尾的下一个元素
    }
}
public class TestDemo {

    public static void main(String[] args) {
        int[] array ={1,5,6,7,8,9,6};

    }

}
